<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php
  include_once("funcoes.php");

  echo "<html lang=\"pt-br\">";
  echo "  <head>";
  echo "  </head>";
  echo "  <body>";

  echo "   <h1 align='center'> Equa&#231;&#245;es Diferenciais Ordin&#225;rias </h1>";
  echo "   <h2 align='center'>M&#233;todo de Runge-Kutta</h2>";
  echo "<br/>";

  $funcao = $_POST['funcao'];
  $x0 = $_POST['x0'];
  $y0 = $_POST['y0'];
  $N = $_POST['N'];
  $B = $_POST['B'];

  //testa se todos os campos estao preenchidos
  if(($_POST['funcao'] == NULL) || ($_POST['x0'] == NULL) || ($_POST['y0'] == NULL) || ($_POST['N'] == NULL) ||
     ($_POST['B'] == NULL)){
    echo "<p><a href=javascript:winopen('ajuda/funcoesphp.php')>".$msg->get('G_MSG_29')."</a></p>";

    echo "   <form Action=index.php?inc=edo_rungekutta.php Method=Post>";
    echo "     <p>&#131;'(x): <input type=text name=funcao size=60 maxlengh=100></p>";

    echo "     <p>x0: <input type=text name=x0 size=6></p>";

    echo "     <p>y0: <input type=text name=y0 size=6></p>";

    echo "     <p>N&#250;mero de passos:</br>";
    echo "        <input type=text name=N size=4></br></p>";

    echo "     <p>O ponto final do intervalo:</br>";
    echo "        <input type=text name=B size=6></p>";

    echo "     <input type=submit value=OK></p>";
    echo "   </form>";
  }
  else{
    //algoritmo Runge-Kutta
/*****************************************************
Este programa calcula EDOs pelo metodo de Runge-Kutta
******************************************************/

/*********************************************************************
*    funcao = eh a funcao digitada pelo usuario para calculo de EDO
*    x0 = aproximacao inicial para x
*    y0 = o valor de y para x0
*    N = numero maximo de iteracoes (passos)
*    B =  o ponto final do intervalo solucao (ultimo valor de x)
**********************************************************************/

    echo "<p>";
    echo "<table cellspacing='0'>";
    echo "  <tr>";
    echo "    <td align='left'> Equa&#231;&#227;o dada:<br/><b>&#131;(x) = $funcao</b> </td>";
    echo "  </tr>";
    echo "  <tr>";
    echo "    <td align='left'> Valor inicial da vari&#225;vel independente:<br/><b>x0 = $x0</b> </td>";
    echo "  </tr>";
    echo "  <tr>";
    echo "    <td align='left'> Valor inicial da vari&#225;vel dependente:<br/><b>y0 = $y0</b> </td>";
    echo "  </tr>";
    echo "  <tr>";
    echo "    <td align='left'> N&#250;mero de passos:<br/><b>N = $N</b> </td>";
    echo "  </tr>";
    echo "  <tr>";
    echo "    <td align='left'> Ponto final do intervalo solu&#231;&#227;o (&#250;ltimo valor de x):<br/>
              <b>B = $B</b> </td>";
    echo "  </tr>";
    echo "</table>";
    echo "</p>";

    echo "<br/>";
    echo "<table border='1' cellspacing='0'>";
    echo "  <tr>";
    echo "    <td align='center'> <b>itera&#231;&#227;o</b> </td>";
    echo "    <td align='center' width='42%'> <b>x</b> </td>";
    echo "    <td align='center' width='42%'> <b>y</b> </td>";
    echo "  </tr>";
    echo "  <tr>";
    echo "    <td align='center'> --- </td>";
    echo "    <td align='center'> $x0 </td>";
    echo "    <td align='left'> $y0 </td>";
    echo "  </tr>";

    $h = ($B-$x0)/$N;

    $x = $x0;
    $y = $y0;
    $novafuncao = str_replace("x","$x",$funcao);
    $novafuncao = str_replace("y","$y",$novafuncao);

    for($i=0;$i<$N;$i++){
      //calculando k1
      $x = $x0;
      $y = $y0;
      $novafuncao = str_replace("x","$x",$funcao);
      $novafuncao = str_replace("y","$y",$novafuncao);
      $k1 = eval("$novafuncao; return($novafuncao);");

      //calculando k2
      $x = $x0 + ($h/2);
      $y = $y0 + (($h*$k1)/2);
      $novafuncao = str_replace("x","$x",$funcao);
      $novafuncao = str_replace("y","$y",$novafuncao);
      $k2 = eval("$novafuncao; return($novafuncao);");

      //calculando k3
      $x = $x0 + ($h/2);
      $y = $y0 + (($h*$k2)/2);
      $novafuncao = str_replace("x","$x",$funcao);
      $novafuncao = str_replace("y","$y",$novafuncao);
      $k3 = eval("$novafuncao; return($novafuncao);");

      //calculando k4
      $x = $x0 + $h;
      $y = $y0 + ($h*$k3);
      $novafuncao = str_replace("x","$x",$funcao);
      $novafuncao = str_replace("y","$y",$novafuncao);
      $k4 = eval("$novafuncao; return($novafuncao);");

      $x1 = $x0 + $h;
      //calculando yi+1
      $y1 = $y0 + ($h*($k1+2*$k2+2*$k3+$k4))/6;

      $j = $i + 1;
      echo "  <tr>";
      echo "    <td align='center'> $j </td>";
      echo "    <td align='center'> $x1 </td>";
      echo "    <td align='left'> $y1 </td>";
      echo "  </tr>";

      $x0 = $x1;
      $y0 = $y1;
    }

    echo "</table>";
  }//fim else

  echo "  </body>";
  echo "</html>"; 

?>

